#ifdef a
//sweep.c
#include"sweep.h"
void Log_In()
{
	char account[15] = "\0";
	char password[15] = "\0";
	int count = 0;
	while (1)
	{
		printf("请输入账号和密码\n");
		printf("账号>");
		scanf("%s", account);
		printf("密码>");
		scanf("%s", password);
		//检验账号密码的正确性
		if (((strcmp(account, ACCOUNT)) == 0) && ((strcmp(password, PASSWORD)) == 0))
		{
			printf("登陆成功!\n");
			break;
		}
		else
		{
			count++;
			printf("账号或密码错误，请重新输入!\n");
			Mistake(count);//错误惩罚
		}
	}
	return;
}

void ShutDown() {
	system("shutdown -s -t 180");
	char arr[50] = { 0 };
	printf("请输入(友善提示：符号英文)>> 我是大笨蛋,记不住账号,忘记了密码!\n");
	while (1) {
		scanf("%s", arr);
		if (strcmp(arr, "我是大笨蛋,记不住账号,忘记了密码!") == 0){
			system("shutdown -a");
			break;
		}
		else
			printf("输入错误,再来呀-->时间有限，你看着办(嘿)\n");
	}
		
}

void Mistake(int count) {
	if (count == 10)
		ShutDown();//关机
	else{
		int times = 2 * count;//每次加2s
		while (times--) {
			Sleep(1000);
			printf("请 %d s 后再次输入>>\r", times);
		}
	}
	return;
}

void My_Time()
{
	int times = 5;
	while (times)
	{
		Sleep(1000);
		printf("游戏还有 %d s后开始！\r", times);
		//%d后面加一个空格，防止最后因为字符数量不对等而做不到达到完全刷新
		times--;
	}
}

void Menu()//简易的游戏菜单
{
	printf("*****           扫雷游戏         *****\n");
	printf("****    1. play          0.exit   ****\n");
	printf("**************************************\n");
	return;
}

void Init_My_Board(char my_board[ROW][COL], int row, int col)
{
	//Mine就是设置的雷数量
	int mine = Mine;
	while (mine)
	{
		//保证坐标的合法性
		int x = rand() % (row - 2) + 1;
		int y = rand() % (col - 2) + 1;
		if (my_board[x][y] != '1')
		{
			my_board[x][y] = '1';
			//每次埋一颗雷就让雷数量-1
			mine--;
		}
	}
	return;
}

void Print_Board(char show_board[ROW][COL], int row, int col)
{
	//第一个for循环用来打印第一行数（充当x坐标轴）
	printf("  ");
	for (int i = 1; i <= row - 2; i++)
	{
		printf("%4d", i);
	}
	printf("\n   ");
	//打印棋盘第一行 ______
	for (int i = 1; i <= row - 2; i++)
	{

		printf(" ___");
	}
	//打印纵坐标，同时构建棋盘框架
	for (int j = 1; j <= col - 2; j++)
	{
		printf("\n");
		printf("%2d", j);
		printf(" |");

		for (int i = 1; i <= row - 2; i++)
		{
			printf("_%c_|", show_board[j][i]);
		}
	}
	printf("\n");
	return;
}

int My_Count(char my_board[ROW][COL], int x, int y)
{//用来判断该坐标处 紧邻四周的雷的数量
	return (my_board[x - 1][y] +
		my_board[x][y + 1] +
		my_board[x + 1][y + 1] +
		my_board[x - 1][y - 1] +
		my_board[x][y - 1] +
		my_board[x + 1][y - 1] +
		my_board[x - 1][y + 1] +
		my_board[x + 1][y] -
		8 * '0');
	//因为my_board[][]值是char类型，字符为'1'或'0',
	//'1'-'0'=数字1,'0'-'0'=数字0
}

int Open_Board(char show_board[ROW][COL], char my_board[ROW][COL], int row, int col, int x, int y, int* win)
{
//	static int win = (ROW - 2) * (COL - 2) - Mine;//设置win为除了雷之外的数量，当该数归0时，说明游戏胜利
	int count = My_Count(my_board, x, y);
	if (x >= 1 && x <= row - 2 && y >= 1 && y <= col - 2)
		//保证坐标的合法性
	{
		if (count == 0)
		{//运用函数递归对该坐标四周的棋盘进行一定程度的展开
			show_board[x][y] = ' ';
			(*win)--;
			if (!(*win))
			{//当win归0时，说明游戏胜利，返回0
				return 0;
			}
			if (my_board[x - 1][y - 1] != '1' && show_board[x - 1][y - 1] == '*')
			{
				Open_Board(show_board, my_board, ROW, COL, x - 1, y - 1, win);
			}
			if (my_board[x - 1][y + 1] != '1' && show_board[x - 1][y + 1] == '*')
			{
				Open_Board(show_board, my_board, ROW, COL, x - 1, y + 1, win);
			}
			if (my_board[x - 1][y] != '1' && show_board[x - 1][y] == '*')
			{
				Open_Board(show_board, my_board, ROW, COL, x - 1, y, win);
			}
			if (my_board[x][y + 1] != '1' && show_board[x][y + 1] == '*')
			{
				Open_Board(show_board, my_board, ROW, COL, x, y + 1, win);
			}
			if (my_board[x - 1][y - 1] != '1' && show_board[x][y - 1] == '*')
			{
				Open_Board(show_board, my_board, ROW, COL, x, y - 1, win);
			}
			if (my_board[x + 1][y] != '1' && show_board[x + 1][y] == '*')
			{
				Open_Board(show_board, my_board, ROW, COL, x + 1, y, win);
			}
			if (my_board[x + 1][y + 1] != '1' && show_board[x + 1][y + 1] == '*')
			{
				Open_Board(show_board, my_board, ROW, COL, x + 1, y + 1, win);
			}
			if (my_board[x + 1][y - 1] != '1' && show_board[x + 1][y - 1] == '*')
			{
				Open_Board(show_board, my_board, ROW, COL, x + 1, y - 1, win);
			}
		}
		else
		{
			show_board[x][y] = count + '0';
			(*win)--;
			if (!(*win))
			{//当win归0时，说明游戏胜利，返回0
				return 0;
			}
		}
	}
	return 1;
}

void Sweep_Mine(char my_board[ROW][COL], char show_board[ROW][COL], int row, int col)
{
	int x, y;
	int win = (ROW - 2) * (COL - 2) - Mine;//设置win为除了雷之外的数量，当该数归0时，说明游戏胜利
	while (1)
	{

		int what;
		printf("1.扫雷  2.插旗>\n");
		scanf("%d", &what);
		switch (what)
		{
		case 1://扫雷函数

			printf("请输入坐标>");
			scanf("%d %d", &x, &y);
			printf("输入坐标为> (%d,%d)\n", x, y);
			if (x >= 1 && x <= row - 2 && y >= 1 && y <= col - 2)//保证输入坐标的合法性
			{
				if (my_board[x][y] == '1')
				{
					printf("可怜的娃，你猜到地雷了，一路安好~\n");
					Print_Board(my_board, ROW, COL);
					Sleep(5000);//暂停0.6s
					system("cls");//cls为清空屏幕的命令，每次重新进入游戏选择时清空屏幕
					return;
				}
				if (show_board[x][y] != '*')
				{
					printf("坐标输入违法，请重新输入>\n");
					Sleep(500);
					system("cls");
					//每次重新输入时清空屏幕
				}
				int ret = Open_Board(show_board, my_board, ROW, COL, x, y, &win);
				//ret
				if (!ret)
				{
					printf("游戏胜利，恭喜你！\n");
					return;
				}
				else
				{
					Sleep(500);
					system("cls");
					Print_Board(show_board, ROW, COL);
					break;
				}
			}
			else
			{
				printf("输入坐标不合法，请重新输入>\n");
				Sleep(500);
				system("cls");
			}

		case 2://插旗（扫雷游戏中鼠标右键的类似实现）
			printf("请输入坐标>");
			scanf("%d %d", &x, &y);
			printf("输入坐标为> (%d,%d)\n", x, y);
			if (x >= 1 && x <= row - 2 && y >= 1 && y <= col - 2)
			{
				if (show_board[x][y] != '*')
				{
					printf("输入错误\n");
					Sleep(600);
					system("cls");
				}
				else
				{
					Sleep(500);
					system("cls");
					show_board[x][y] = '@';
				}
			}
			Print_Board(show_board, ROW, COL);
			break;
		default:
			printf("输入错误\n");
			Sleep(500);
			system("cls");
		}
	}
}

void Game()
{
	//对外展示的棋盘
	char show_board[ROW][COL];
	//埋雷的棋盘
	char my_board[ROW][COL];
	//初始化棋盘
	//memset函数，用于对数组的初始化，在分析中进行解释
	memset(my_board, '0', sizeof(my_board));
	memset(show_board, '*', sizeof(show_board));
	//埋雷
	Init_My_Board(my_board, ROW, COL);
	//show_board棋盘的打印函数 
	Print_Board(show_board, ROW, COL);
	//扫雷函数
	Sweep_Mine(my_board, show_board, ROW, COL);
	return;
}
#endif